package com.etoak.controller;


import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.etoak.entity.Position;
import com.etoak.entity.User;
import com.etoak.service.PositionService;
import com.etoak.service.UserService;
import com.etoak.tool.PositionTool;
import com.etoak.utils.IUUID;
import com.etoak.utils.R;
import com.etoak.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author et2107
 * @since 2024-01-18
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService usersevice;

    @Autowired
    PositionService positionService;

    /**
     * 添加用户数据
     * @param user
     * @return
     */
    @PostMapping("/addUserData")
    public R addUserData(@RequestBody User user){

        // 判断姓名是否为空
        if (StrUtil.isEmpty(user.getName())){
            return R.error(null).msg("姓名不能为空");
        }

        // 生成uuid作为主键
        user.setId(IUUID.getUUID());

        // 保存到数据库
        usersevice.save(user);

        return R.success().msg("添加成功");
    }

    /**
     * 获得用户列表
     * @param user
     * @return
     */
    @PostMapping("getUser")
    public R getUser(@RequestBody User user){

        // 创建查询规则
        QueryWrapper queryWrapper = new QueryWrapper();

        // 姓名和id至少有一个
        if (StrUtil.isEmpty(user.getName()) && StrUtil.isEmpty(user.getId())){
            return R.error(null).msg("参数不正确");
        }

        // 如果提供id则需要全匹配
        if (StrUtil.isNotEmpty(user.getId())){
            queryWrapper.eq("id",user.getId());
        }

        // 如过提供姓名，运行模糊查询
        if (StrUtil.isNotEmpty(user.getName())){
            queryWrapper.like("name",user.getName());
        }

        // 进行查询
        List list = usersevice.list(queryWrapper);
        return R.success(list).msg("查找成功");

    }

    /**
     * 获得用户的位置信息
     * @param userVO
     * @return
     */
    @PostMapping("getUserPosition")
    public R getUserPosition(@RequestBody UserVO userVO){

        // 判断id是否为空
        if (StrUtil.isEmpty(userVO.getId())){
            return R.error(null).msg("id不能为空");
        }

        User user = usersevice.getUserPosition(userVO);

        if ( null == user){
            return R.success().msg("未找到相关用户数据");
        }

        // 判断是否需要生成路径
        if (userVO.getCreatePath()){

            // 防止发生异常
            try {
                List<Position> list = PositionTool.list(user.getPositions(), userVO.getTrafficMode());
                // 生成路径成功则返回生成后的路径
                user.setPositions(list);
            }catch (Exception e) {
                e.printStackTrace();
                // 生成路径失败则返回生成前的路径
                return R.success(user).msg("路线查找失败\n" + e.getMessage());
            }
        }

        return R.success(user).msg("路线查找成功");
    }

}

